/**
 * 基本的接口结构，如相应值、表格等
 */
// 导入字典的选项类型接口
import { type Option } from '@/api/dict';

// 服务端返回的分页数据接口类别
export interface TablePaginationData {
  data: string | []; // 返回的数据，如果是""表示数据为空，否则返回数组形式。
  totalRecords: number; // 总记录数
  pageSize: number; // 每页显示数
  page: number; // 当前页数
}
// 服务端返回的数据接口
export interface ResponseData {
  code: number; // 返回状态，0表示成功
  success: boolean; //业务逻辑，true表示陈宫
  msg?: string; // 返回的错误信息
  // data?: string | TablePaginationData; // 返回的数据，如果是""表示数据为空，否则返回数组形式。
  data?: any;
  time: number; // 请求时间，长整型
}
// 表格列字段
export interface TableColumn {
  label: string; // 字段的标签，如账户名
  prop: string; // 字段的属性名，如username
  propAsName?: string; //字段的属性别名。用在对象的属性，例如要展示user.name，则可以使用这个来表示
  width?: number; // 列宽度，如100
  align?: string; // 对齐方式，默认是居中
  fixed?: boolean; // 对应element table的fixed属性
  type?: string; // 属性的类型，如自定义就是custom;
  dict?: Option[]; // 字典集合，用于配合表格展示，如性别集合
  urlDate?: object; //链接地址，当type为link类型时，传入router.push()函数中的参数对象
  // visible?: boolean, // 该列是否显示
  componentWidth?: string; //表格列中的容器宽度，注意需要检查该列内的元素是否支持该设计。例如图片
  componentHeight?: string; //表格列中的容器宽度，注意需要检查该列内的元素是否支持该设计。例如图片
  // config?: object; //单元格配置，注意每个单元格的配置要与Ljy定义的表格插件中的对应。
  config?: {
    dictTag?: {
      //是否使用tag标签
      primary?: string[] | number[] | boolean[]; //按照element plus的tag标签属性设置，对应的是设置为这个属性的值是什么，目前只支持单个值。
      success?: string[] | number[] | boolean[]; //按照element plus的tag标签属性设置，对应的是设置为这个属性的值是什么，目前只支持单个值。
      info?: string[] | number[] | boolean[]; //按照element plus的tag标签属性设置，对应的是设置为这个属性的值是什么，目前只支持单个值。
      warning?: string[] | number[] | boolean[]; //按照element plus的tag标签属性设置，对应的是设置为这个属性的值是什么，目前只支持单个值。
      danger?: string[] | number[] | boolean[]; //按照element plus的tag标签属性设置，对应的是设置为这个属性的值是什么，目前只支持单个值。
    };
  };
}
// 表格基本数据
export interface TableData {
  // 记录表格数据
  data: any[]; // 表格记录
  // 分页-传递到服务端的数值
  pageSize?: number; // 每页的最大记录数
  page?: number; // 当前页
  // 分页-服务端返回的数值
  total?: number; // 总记录数
  hideOnSinglePage?: boolean; // 如果只有一页，则隐藏分页栏，隐藏之后无法再选择恢复（例如改变每页的最大记录数为单页后，无法再修改每页记录数，因为分页栏已经消失）。false为不隐藏，如果不隐藏可以不在分页插件设置该属性。
}

// 表单字段
export interface FormHeader {
  label: string; // 表单的label信息，对应element的表单Label
  prop: string; // 表单的prop信息，对应element的表单prop
  //用于对应绑定的值，主要用于自定义表单。
  // 例如自定义物料选择文本框，有一个隐藏文本框是物料id(传值到后端)，一个是显示内容但是不传值的物料name
  propLabel?: string;
  // // 表单的prop重命名。因为关联属性，如prop命名为department.id后，无法在slot中被认可或是判断存在，一般会在prop改命名为departmentId
  // 如果需要进行处理该属性则可以在propName中命名为"department.id"进行处理
  propAsName?: string;
  //propAsNames是针对可能存在日期范围选择器中1个属性同时绑定2个值的情况。
  //可以使用数组来判定，例如propAsNames: ['createTimeQueryOfBegin', 'createTimeQueryOfEnd'],
  //注意：propAsNames和propAsName不能同时使用
  propAsNames?: string[];
  action?: string; //表单是在什么动作时显示，可选值：post、put、patch等。如果为空则表示所有动作都显示。不显示的话，改表单字段的验证都不生效。
  width?: string; // 表单宽度，如100px
  labelPosition?: string; //表单域标签的位置， 当设置为 left 或 right 时，则也需要设置 label-width 属性 默认会继承 Form的label-position
  placeholder?: string; // 对应表单元素的placeholder属性
  disabled?: boolean; // 表单元素是否禁用
  readonly?: boolean; // 表单元素是否只读
  show?: boolean; // 表单元素是否显示
  icon?: string; // 表单元素的内嵌图标，例如：prefix-icon="UserFilled"
  type?: string; // 属性的类型，如默认就是input，自定义就是custom；text表示文本；textarea表示文本区域,number就是数字类型（v-moel.number）,integer表示整数
  dict?: Option[]; // 字典集合，用于配合表格展示，如性别集合
  rules?: any[]; // 单个字段的验证规则
  dateType?: string; // 选择日期后的返回类型，新增时间：2023-01-16 新增人：qzy
  list?: any[]; //用于el-select列表，指这个字段是列表选项
  url?: string; //用于远程加载数据的组件
  queryNameForUrl?: string; //查询条件，一般用于select远程加载或自动补全中的查询名称，例如axios时传递参数params: { [props.queryName]: query }
  //textarea 高度是否自适应，仅 type 为 'textarea' 时生效。 可以接受一个对象，比如: { minRows: 2, maxRows: 6 }
  autosize?: {
    minRows: number;
    maxRows: number;
  };
  config?: {
    //针对控件的具体配置。根据不同控件决定
    //额外配置
    custom?: {};
    //下拉框控件
    valueKey?: string; //例如select下拉框的value-key。
    // <el-option   v-for="(item1, index1) in item.list":key="index1" :label="`${item1.config.defaultProp.label`" :value="item1.config.defaultProp.value" >
    defaultProp?: {
      value: string; //对应上述标签的value属性
      label: string; //对应上述标签的label属性
      labelRegexType?: number; //label标签的识别规则，具体可以参考@/components/base/form/RemoteElSelectComponent.vue中的设计
    };
    multiple?: boolean; //是否为多选
    multipleLimit?: number; //默认多选的数量限制，对应multiple-limit
    //富文本编辑器Wangeditor配置
    wangeditor?: {
      toolbarMode?: string;
      editorMode?: string;
      editorHeight?: number;
      editorPlaceholder?: string;
      toolbarExcludeKeys?: string[];
    };
    //针对el-input-number的配置文件
    number?: {
      precision?: number; //数字精度，2表示为小数点为2位
      min?: number; //设置计数器允许的最小值
      max?: number; //设置计数器允许的最大值
      prefix?: string; //输入框头部内容
      suffix?: string; //输入框尾部内容
    };
  };
}

// 树形菜单菜单。可以用于element-ui的treeselect组件
export interface TreeData {
  // 树形接口类型
  id: number;
  name: string;
  children?: TreeData[];
}
// 树形菜单菜单自定义树形。详见用于element-ui的treeselect组件
export interface TreeProps {
  // 树形接口类型
  value: string;
  label: string;
  children: string;
}

//style接口，用于传递样式对象
export interface Style {
  height?: string;
  width?: string;
  overflow?: string;
}
